package com.java.common.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.util.StringUtils;

import java.util.Date;
import java.util.Map;

/**
 * JWT操作工具类
 */
public class JwtUtil {
    // Token的有效期30分钟
    private static final int TOKEN_TIME_OUT = 60 * 1000 * 30;
    // 加密KEY
    private static final String TOKEN_SECRET = "token";

    // 生成Token
    public static String getToken(Map map){
        return Jwts.builder()
                .signWith(SignatureAlgorithm.HS512, TOKEN_SECRET) // 加密方式
                .setExpiration(new Date(new Date().getTime() + TOKEN_TIME_OUT))
                // 过期时间
                .addClaims(map)
                .compact();
    }

    /**
     * 获取Token中的claims信息
     */
    public static Claims getClaims(String token) {
        return Jwts.parser()
                .setSigningKey(TOKEN_SECRET)
                .parseClaimsJws(token).getBody();
    }

    /**
     * 校验Token是否有效
     */
    public static boolean verifyToken(String token) {
        if (StringUtils.isEmpty(token)) {
            return false;
        }
        try {
            Claims claims = Jwts.parser()
                    .setSigningKey(TOKEN_SECRET)
                    .parseClaimsJws(token)
                    .getBody();
        } catch (Exception e) {
            return false;
        }
        return true;
    }
}
